/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agen.util;

import java.util.Arrays;
import java.util.List;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

/**
 *
 * @author juan
 */
public class GenesTableModel extends AbstractTableModel implements TableModel {

    private String colname = "Gen";
    private String[][] data = new String[1][1];
    private int[][] genes = null;

    public int getRowCount() {
        return data.length;
    }

    public int getColumnCount() {
        return data[0].length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        return data[rowIndex][columnIndex];
    }

    @Override
    public String getColumnName(int column) {
        return colname;
    }
    /**
     * controla que no haya elementos repetidos antes de agregar un conjunto de
     * elementos del individuo como un gen.
     * @param elementos
     */
    public void agregarGen(int[] elementos) {
        if (!eltosRepetidos(elementos)) {
            genes = (genes == null) ? new int[1][] : Arrays.copyOf(
                genes, genes.length + 1);
            genes[genes.length - 1] = elementos;
            String gen = "In" + Arrays.toString(elementos);
            if (data[0][0] == null) {
                data[0] = new String[]{gen};
                fireTableDataChanged();
            } else {
                data = Arrays.copyOf(
                        data, data.length + 1);
                data[data.length - 1] = new String[]{gen};
                fireTableDataChanged();
            }
        }
    }

    /**
     * Elimina un gen de la tabla de genes.
     * @param genRow
     */
    public void borrarGen(int genRow) {
        Vector<int[]> a = new Vector(Arrays.asList(genes));
        a.remove(genRow);
        genes = (int[][]) a.toArray(new int[genes.length-1][]);

        Vector<String[]> b = new Vector(Arrays.asList(data));
        b.remove(genRow);
        data = (String[][]) b.toArray(new String[data.length-1][]);
        if (data.length == 0)
            data = new String[1][1];//si no da error cuando jtable llama getValueAt
        fireTableRowsDeleted(genRow, genRow);
    }
/**
 * Devuelve true si algun entero en int elementos[] es igual a algun entero en
 * int genes[][]
 *
 * @param elementos
 * @return
 */
    private boolean eltosRepetidos(int[] elementos) {
        if (genes == null )
            return false;
        for (int i : elementos) {
            for (int[] j : genes) {
                for (int k : j) {
                    if (k == i) {
                        return true;
                    }
                }
            }
        }
        return false;
    }
}
